맨위로가기

WAR (파일 포맷)

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

WAR 파일은 웹 애플리케이션을 배포하기 위한 파일 형식으로, JAR 파일과 유사한 구조를 가지며 디지털 서명이 가능하다. WAR 파일은 `/WEB-INF` 디렉토리를 포함하며, 이 디렉토리 안에는 웹 애플리케이션의 구조를 정의하는 `web.xml` 파일이 있다. WAR 파일은 웹 애플리케이션의 테스트 및 배포를 간편하게 하고, 버전 관리를 용이하게 하며, 모든 Java EE 컨테이너에서 지원된다는 장점이 있다. 그러나 소스 코드 변경 시마다 다시 패키징하고 배포해야 하는 번거로움이 단점으로 지적된다.

더 읽어볼만한 페이지

  • 아카이브 포맷 - ARJ
    ARJ는 다양한 소프트웨어 유틸리티에서 압축 해제가 가능한 파일 포맷으로, macOS에서는 독립 실행형 유틸리티를 통해 압축을 해제할 수 있다.
  • 아카이브 포맷 - JAR (파일 포맷)
    JAR (Java ARchive)는 자바 런타임 환경에서 애플리케이션 배포를 위해 사용되는 ZIP 기반의 파일 포맷으로, 자바 클래스 파일과 매니페스트 파일을 포함하여 메타데이터와 실행 정보를 관리하며, 압축 및 전자 서명을 지원하고 실행 가능한 JAR 파일을 통해 애플리케이션을 간편하게 실행할 수 있게 한다.
  • 자바 플랫폼, 엔터프라이즈 에디션 - IBM 웹스피어
    IBM 웹스피어는 IBM에서 출시한 기업용 소프트웨어 제품군 브랜드로, 다양한 애플리케이션 인프라, 비즈니스 프로세스 통합, 정보 통합 및 개발 도구를 포함한다.
  • 자바 플랫폼, 엔터프라이즈 에디션 - 자카르타 서버 페이지
    자카르타 서버 페이지(JSP)는 웹 애플리케이션 개발에 사용되는 서버 측 스크립팅 기술로, 서블릿으로 변환되어 실행되고 HTML 형태로 결과를 반환하며, 지시어, 스크립틀릿, 표현식, 액션 등의 문법 요소, 표현 언어(EL), JSTL을 통해 동적인 웹 페이지를 구현하고 개발 편의성을 높였다.
WAR (파일 포맷) - [IT 관련 정보]에 관한 문서
기본 정보
ZIP 파일 형식 로고
ZIP 파일 형식 로고
종류아카이브
확장자.war
MIME 형식application/java-archive
매직 넘버PK (표준 ZIP 파일)
개발선 마이크로시스템즈
컨테이너JSP, Java Servlet
기반JAR
추가 정보
설명웹 애플리케이션 배포용 아카이브 파일 형식

2. 구조 및 내용

WAR 파일은 JAR 파일과 동일한 방식으로 디지털 서명될 수 있다.

WAR 파일 내에는 특수 파일과 디렉토리가 존재한다. `/WEB-INF` 디렉토리에는 웹 애플리케이션의 구조를 정의하는 web.xml 파일이 있다. 웹 애플리케이션이 JSP 파일만 제공하는 경우 `web.xml` 파일은 필수가 아니지만, 서블릿을 사용하는 경우에는 서블릿 컨테이너가 `web.xml` 파일을 이용하여 URL 요청을 서블릿으로 라우팅한다. 또한, `web.xml`은 서블릿에서 참조 가능한 컨텍스트 변수와 배포자가 설정해야 하는 환경 종속성을 정의하는데 사용된다. 예를 들어, 이메일 전송에 사용되는 메일 세션에 대한 종속성을 정의하고, 서블릿 컨테이너가 이 서비스를 제공하도록 할 수 있다.[1]

2. 1. 기본 구조

WAR 파일은 JAR 파일과 동일한 방식으로 디지털 서명될 수 있어 소스 코드의 출처를 확인할 수 있다.

WAR 파일 내에는 특수 파일과 디렉토리가 있다.

  • `/WEB-INF` 디렉토리에는 웹 애플리케이션의 구조를 정의하는 web.xml 파일이 있다.
  • 웹 애플리케이션이 JSP 파일만 제공하는 경우 `web.xml` 파일은 반드시 필요한 것은 아니다.
  • 웹 애플리케이션이 서블릿을 사용하는 경우, 서블릿 컨테이너는 `web.xml`을 사용하여 URL 요청이 서블릿으로 라우팅될지를 확인한다.
  • `web.xml` 파일은 서블릿 내에서 참조할 수 있는 컨텍스트 변수를 정의하고, 배포자가 설정해야 하는 환경 종속성을 정의하는 데 사용된다.
  • 예를 들어 이메일을 보내는 데 사용되는 메일 세션에 대한 종속성이 있으며, 서블릿 컨테이너는 이 서비스를 제공한다.[1]

2. 2. /WEB-INF 디렉토리

WAR 파일의 /WEB-INF 디렉토리에는 웹 애플리케이션의 구조를 정의하는 web.xml 파일이 포함되어 있다. 웹 애플리케이션이 JSP 파일만 제공하는 경우 `web.xml` 파일은 필수적이지 않다. 웹 애플리케이션이 서블릿을 사용하는 경우 서블릿 컨테이너는 `web.xml`을 사용하여 URL 요청을 서블릿에 라우팅한다. `web.xml` 파일은 서블릿 내에서 참조할 수 있는 컨텍스트 변수와 배포자가 설정해야 하는 환경 종속성을 정의하는 데에도 사용된다.

/WEB-INF/classes 디렉터리는 클래스로더클래스패스(classpath)에 있으며, 웹 애플리케이션 실행 시 .class 파일들이 호출되는 곳이다. /WEB-INF/lib 디렉터리에 있는 JAR 파일들은 클래스로더의 클래스패스에 포함될 수 있다.

2. 2. 1. web.xml

`web.xml` 파일은 웹 애플리케이션의 설정을 정의하는 XML 파일이다. 웹 애플리케이션이 서블릿을 사용하는 경우, 서블릿 컨테이너는 `web.xml`을 사용하여 URL 요청이 어떤 서블릿으로 라우팅될지 결정한다. `web.xml`은 서블릿 내에서 참조 가능한 컨텍스트 변수를 정의하고, 배포자가 설정해야 하는 환경 종속성을 정의하는 데에도 사용된다. 예를 들어, 이메일 전송에 사용되는 메일 세션에 대한 종속성을 정의할 수 있다. 서블릿 컨테이너는 이러한 서비스를 제공한다.

다음은 서블릿의 선언 및 연결을 보여주는 `web.xml` 파일의 예시이다.

```xml




PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"

"http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">





HelloServlet

mypackage.HelloServlet





HelloServlet

/HelloServlet







Resource reference to a factory for javax.mail.Session

instances that may be used for sending electronic mail messages,

preconfigured to connect to the appropriate SMTP server.



mail/Session

javax.mail.Session

Container





```

웹 애플리케이션이 JSP 파일만 제공하는 경우에는 `web.xml` 파일이 반드시 필요하지는 않다.

2. 2. 2. /WEB-INF/classes

/WEB-INF/classes 디렉터리는 클래스 로더의 클래스패스에 있다. 이 위치는 .class 파일들(Java 클래스 파일)이 웹 애플리케이션 실행 시 호출되는 곳이다. 웹 애플리케이션에서 사용하는 Java 클래스 파일들이 이 디렉터리에 위치하며, 클래스 로더의 클래스패스에 포함되어 웹 애플리케이션 실행 시 참조된다.

2. 2. 3. /WEB-INF/lib

웹 애플리케이션에서 사용하는 라이브러리(JAR 파일)들이 위치하는 디렉터리이다. 클래스 로더의 클래스패스에 포함되어 웹 애플리케이션 실행 시 참조된다.

3. 장점

WAR 파일은 웹 애플리케이션 개발 및 배포를 단순화하고 효율성을 높이는 여러 장점을 제공한다. 예를 들어, 테스트 환경과 운영 환경의 설정 파일을 분리하여 개발자가 테스트와 검증을 거친 WAR 파일이 운영 환경에 배포되는 파일과 동일하다는 확신을 가질 수 있게 한다.[1]

3. 1. 간편한 배포 및 테스트

웹 애플리케이션을 하나의 파일로 묶어(패키징) 테스트 및 배포를 간편하게 할 수 있다. 또한 배포된 애플리케이션 버전 식별이 쉽다. 모든 Java EE 컨테이너에서 WAR 파일을 지원하며, MVC 구조는 WAR 파일을 지원한다.[1]

운영 환경에서는 배포 전에 충분한 테스트를 거치지 않고 수정 사항을 적용하지 않는다고 가정할 때, WAR 파일은 프로퍼티 파일을 사용하여 환경별 변수를 식별할 때 뚜렷한 이점을 가진다. 예를 들어, 테스트 환경의 LDAP 서버는 `ldaps://testauth.example.com:636`과 같을 수 있고, 운영 환경의 LDAP 서버는 `ldaps://auth.example.com:636`과 같을 수 있다. 외부 프로퍼티 파일은 다음과 같이 링크를 정의한다.[1]

LINKED_PAGE=ldaps://testauth.example.com:636

소스 코드는 프로퍼티 파일을 읽어 대상 LDAP 서버를 결정한다. 이러한 방식으로 개발자는 테스트 및 검증된 WAR 파일이 운영 환경으로 승격되는 파일과 정확히 동일하다는 것을 확신할 수 있다.[1]

3. 2. 버전 관리 용이

WAR 파일은 배포된 애플리케이션의 버전을 쉽게 식별하고 관리할 수 있게 해준다.[1] 이는 프로퍼티 파일을 사용하여 환경별 변수를 식별할 때 특히 유용하다.[1]

예를 들어, 테스트 환경의 LDAP 서버 주소는 `ldaps://testauth.example.com:636`이고, 프로덕션 환경의 LDAP 서버 주소는 `ldaps://auth.example.com:636`일 수 있다.[1] 이 경우, 외부 프로퍼티 파일에 다음과 같이 링크를 정의할 수 있다.[1]

`LINKED_PAGE=ldaps://testauth.example.com:636`

소스 코드는 이 프로퍼티 파일을 읽어 대상 LDAP 서버를 결정한다.[1] 이러한 방식을 통해 개발자는 테스트 및 검증된 WAR 파일이 프로덕션 환경으로 배포되는 파일과 정확히 동일하다는 것을 확신할 수 있다.[1]

3. 3. 표준화된 형식

Java EE 컨테이너에서 WAR 파일을 지원하므로 모든 Java EE 환경에서 호환성 문제가 적다.[1]

3. 4. MVC 구조 지원

MVC 구조는 WAR 파일을 지원한다.[4] 이를 통해 웹 애플리케이션 개발 생산성을 높일 수 있다.

프로덕션 환경에서는 배포 전에 충분한 테스트 없이 수정 사항을 적용하지 않는다고 가정할 때, WAR 파일은 프로퍼티 파일을 사용하여 환경별 변수를 식별할 때 뚜렷한 이점을 갖는다. 예를 들어, 테스트 환경의 LDAP 서버는 `ldaps://testauth.example.com:636`과 같을 수 있고, 프로덕션 환경의 LDAP 서버는 `ldaps://auth.example.com:636`과 같을 수 있다. 외부 프로퍼티 파일은 다음과 같이 링크를 정의한다.

LINKED_PAGE=ldaps://testauth.example.com:636

소스 코드는 프로퍼티 파일을 읽어 대상 LDAP 서버를 결정한다. 이러한 방식으로 개발자는 테스트 및 검증된 WAR 파일이 프로덕션으로 승격되는 파일과 정확히 동일하다는 것을 확신할 수 있다.

3. 5. 환경 설정 분리

프로덕션 환경에서는 배포 전에 충분한 테스트 없이 수정 사항을 적용하지 않는다고 가정할 때, WAR 파일은 프로퍼티 파일을 사용하여 환경별 변수를 식별할 때 뚜렷한 이점을 가진다. 예를 들어, 테스트 환경의 LDAP 서버는 `ldaps://testauth.example.com:636`과 같을 수 있고, 프로덕션 환경의 LDAP 서버는 `ldaps://auth.example.com:636`이다. 외부 프로퍼티 파일은 다음과 같이 링크를 정의한다.

LINKED_PAGE=ldaps://testauth.example.com:636

소스 코드는 프로퍼티 파일을 읽어 대상 LDAP 서버를 결정한다. 이러한 방식으로 개발자는 테스트 및 검증된 WAR 파일이 프로덕션으로 승격되는 파일과 정확히 동일하다는 것을 확신할 수 있다.

4. 단점

WAR 파일을 사용한 웹 배포는 소스 코드의 사소한 변경에도 다시 패키징하고 배포해야 하므로 동적 환경에서 불리하다는 의견이 있다.[3]

4. 1. 동적 변경의 어려움

소스 코드의 사소한 변경이라도 WAR 파일을 다시 패키징하고 배포해야 한다.[3] 런타임 배포로 구성된 경우 웹 서버를 중지할 필요는 없지만,[4] 변경 사항을 적용하기 위한 절차가 상대적으로 복잡하다.

5. 예제

다음은 `web.xml` 파일을 통해 서블릿을 선언하고 URL과 연결하는 방법을 보여주는 예제이다.

```xml




PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"

"http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">





HelloServlet

mypackage.HelloServlet





HelloServlet

/HelloServlet







Resource reference to a factory for javax.mail.Session

instances that may be used for sending electronic mail messages,

preconfigured to connect to the appropriate SMTP server.



mail/Session

javax.mail.Session

Container





```

`/WEB-INF/classes` 디렉터리는 클래스로더의 클래스패스에 있다. `.class` 파일들을 이 위치에 두면 웹 애플리케이션 실행 시 호출된다. `/WEB-INF/lib` 디렉터리에 있는 JAR 파일들도 클래스패스에 포함된다.

5. 1. web.xml 예제

다음은 서블릿의 선언 및 연결을 보여주는 ''web.xml'' 파일의 예시이다.






PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"

"http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">





HelloServlet

mypackage.HelloServlet





HelloServlet

/HelloServlet







Resource reference to a factory for javax.mail.Session

instances that may be used for sending electronic mail messages,

preconfigured to connect to the appropriate SMTP server.



mail/Session

javax.mail.Session

Container






참조

[1] 웹사이트 Apache Tomcat 8 (8.0.44) - Tomcat Web Application Deployment https://tomcat.apach[...] Apache Software Foundation 2017-06-27
[2] 웹사이트 What's New in Java Servlet API 2.2? https://www.infoworl[...] JavaWorld 2020-11-08
[3] 웹사이트 Web Application Lifecycle https://docs.oracle.[...] Oracle
[4] 웹사이트 Deploying on a running Tomcat server https://tomcat.apach[...] Apache Software Foundation
[5] 웹인용 What's New in Java Servlet API 2.2? http://www.oracle.co[...] JavaWorld(Reprinted by Oracle Corporation) 2014-08-26



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com